DB Definitions allow you to "describe" the structure of your database to the Flow application. This allows Flow to understand your particular database structure and read and write data to it. This gives you the flexibility to interact with any database structure as you are in complete control over the definition.
A DB Definition is an in-memory representation of the data you are going to read or write from the database. When reading data the definition is opened against the database and data read from the database into memory. The data is retained in memory until the definition is closed.
When writing data the definition is opened against the database but no data is read. This provides an in-memory representation of what the data structure is. You then write data into the definition using a map, and this is subsequently converted to appropriate Insert/Update statements when writing the data into the database. Even after writing the data to the database, the data is retained in memory until the definition is closed. If the act of writing to the database has caused auto-generated fields to create values, these values can be returned to the in-memory dataset.
You can create a single DB Definition and use it against multiple similar databases simply by assigning a different DB Connection. When assigning a DB Connection to a DB Definition it is considered a design time assignment, when coming to use the DB Definition in an Action you have the chance to reassign the DB Connection (run time assignment). This allows you to use the same DB Definition in multiple Actions each with their own DB Connection.